import spark_md5 from '../lib/spark-md5.js';
import qs from '../lib/qs.js';
import axios from '../lib/axios.js';

//#region ajax封装的部分
// 封装公用ajax请求的方法
// 1:api地址，2:请求方式，3：请求的数据，4：应答的处理
// 服务器基础地址
const serverUrl = 'https://service.huhuiyu.top';
let ajax = {
  // 本地保存token的名称
  tokenKey: 'service.huhuiyu.top.token',
  // 保存应答信息中的token
  saveToken: (data) => {
    // 如果存在token信息就保存
    if (data && data.token) {
      localStorage.setItem(ajax.tokenKey, data.token);
    }
  },
  // 获取本地保存的token
  loadToken: () => {
    let token = localStorage.getItem(ajax.tokenKey);
    return token ? token : '';
  },
  // 发送ajax请求的方法
  send: (url, method, param, callback) => {
    // 处理请求的json参数为查询字符串
    let paramdata = qs.stringify(param, { allowDots: true });
    // 拼接完整的请求地址
    let sendurl = serverUrl + url;
    // 请求方式处理,get请求需要拼接查询字符串到url
    if ('get' == method) {
      sendurl = sendurl + '?' + paramdata;
      paramdata = '';
    }
    // 发送ajax请求
    let promise = axios({
      url: sendurl,
      method: method,
      data: paramdata,
      headers: {
        // 通过头信息发送token值
        token: ajax.loadToken(),
      },
    });
    promise
      .then((resp) => {
        // 保存token信息
        ajax.saveToken(resp.data);
        // 成功应答就交给回调函数处理
        callback(resp.data);
      })
      .catch((err) => {
        console.error(err);
      });
  },

  post: (url, param, callback) => {
    ajax.send(url, 'post', param, callback);
  },

  get: (url, param, callback) => {
    ajax.send(url, 'get', param, callback);
  },
};

//#endregion

//#region 工具类的部分
let tools = {
  // md5加密
  md5: (info) => {
    if (!info || info.trim() == '') {
      return '';
    }
    return spark_md5.hash(info);
  },
  // 格式化时间或者时间戳信息
  formatDate: (date, format = 'yyyy-MM-dd hh:mm:ss') => {
    console.log('参数信息：', date, format);
    let now = new Date();
    // date可以是时间戳
    if (typeof date == 'number') {
      now.setTime(date);
    } else {
      now = date;
    }
    // 获取年月日时分秒的信息
    let y = now.getFullYear();
    let m = now.getMonth() + 1;
    let d = now.getDate();
    let h = now.getHours();
    let mm = now.getMinutes();
    let s = now.getSeconds();
    // 前导补零
    m = m < 10 ? '0' + m : m;
    d = d < 10 ? '0' + d : d;
    h = h < 10 ? '0' + h : h;
    mm = mm < 10 ? '0' + mm : mm;
    s = s < 10 ? '0' + s : s;

    // 替换格式化字符串的内容为对应的时间信息
    let result = format.replace(/yyyy/g, y);
    result = result.replace(/MM/g, m);
    result = result.replace(/dd/g, d);
    result = result.replace(/hh/g, h);
    result = result.replace(/mm/g, mm);
    result = result.replace(/ss/g, s);

    return result;
  },
  // 合并任意个json对象为一个
  mergeJson: (...jsons) => {
    // 声明一个空的json对象
    let result = {};
    // 循环处理json对象的复制
    for (let i = 0; i < jsons.length; i++) {
      let json = jsons[i];
      // 逐个处理每一json的复制
      for (let key in json) {
        // 复制每一个key的数据
        result[key] = json[key];
      }
    }
    return JSON.parse(JSON.stringify(result));
  },
};

//#endregion

export { ajax as ajax, tools as tools };
